package com.junit;

import com.fasterxml.jackson.databind.ObjectMapper;
import com.hcfly.entity.SmsLogs;
import com.hcfly.utils.ESClient;
import org.elasticsearch.action.admin.indices.create.CreateIndexRequest;
import org.elasticsearch.action.admin.indices.create.CreateIndexResponse;
import org.elasticsearch.action.bulk.BulkRequest;
import org.elasticsearch.action.bulk.BulkResponse;
import org.elasticsearch.action.index.IndexRequest;
import org.elasticsearch.client.RequestOptions;
import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.common.settings.Settings;
import org.elasticsearch.common.xcontent.XContentBuilder;
import org.elasticsearch.common.xcontent.XContentType;
import org.elasticsearch.common.xcontent.json.JsonXContent;
import org.junit.Test;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;

public class Dome4 {
    private static final  String doc="原标题：针对中国的“亚洲小北约”真来了？从某种意义上，这是故意演给中国看的。" +
            "这场演习真的会成为“亚洲小北约”的起始点？从印度和西方媒体报道来看，随着印度同意澳大利亚" +
            "在今年底正式加入“马拉巴尔2020”演习，这很可能会给美印日澳“四国集团”带来实质性的变化。由于" +
            "澳大利亚正式加入“马拉巴尔军演”，有专家认为，这标志着“四方安全对话”机制在军事合作层面走向实体化。" +
            "那么，“亚洲北约”离我们越来越近了？马拉巴尔海上军演最初是印度主导创立的，由于演习地点在印度 “马拉巴尔" +
            "”海滩而得名。军演从1992年持续至今，从未间断过。最初，参与马拉巴尔海上军演的只有美国和印度两国，美" +
            "国起初的目的就是希望保持在印度洋海域的存在，同时拉近与印度之间的关系。\n" +
            "因此，最初的马拉巴尔军演比较单纯，没有什么关于假想对手的猜测。但是，随着全球格局的变化，日本、澳" +
            "大利亚以及新加坡也相继加入马拉巴尔军演，该军演的主要项目也演变成了海上救援和联合反恐。澳大利亚其实曾在2007年参加了马拉" +
            "巴尔演习，外媒报道说，由于遭到北京强烈反对后，印度方面不想因此影响到中印关系，所以后来就没有邀请堪培拉参加。近年" +
            "来，虽然澳大利亚多次表示愿意参加演习，但是印度方面也因为担心北京的感觉，没有同意。\n" +
            "从2015年开始，马拉巴尔演习正式从双边成了“三边”，日本成为了永久性成员。但是，有家告诉刀哥，这个" +
            "过程也反映了印度人对“印度洋看守得很紧”，因为这距离印度和日本于2008年签署一项关于安全合作的联合" +
            "声明已是7年之后。\n" +
            "也正是从2015年开始，马拉巴尔军演的演习地点也从印度洋，逐渐转移到了西太地区，交替在印度洋和西太平洋海域举行。\n" +
            "2017年，中印发生了洞朗对峙。那一年，美日印航母首次同时参与在印度洋孟加拉国国湾举行的“马拉巴尔2" +
            "017”海军联合演习，日本“出云”号直升机航母和印度“维克拉玛蒂亚”号航母一同亮相。\n" +
            "2018年，马拉巴尔军演的地点被选在了关岛海域。显然，美印日意在推进特朗普政府提出的“印太战略”。因为" +
            "有美国海军在太平洋最大的军事基地，其进入印度洋和太平洋的战略轰炸机和航空母舰均由此出发。\n" +
            "按照交替原则，本来2019年的马拉巴尔军演应该在印度洋海域举行，但是美印日最后选择在日本九州岛岛的" +
            "佐世保至关东南部海域举行。而且，日本海自派出“加贺”直升机航母、“五月雨”号通用驱逐舰和“鸟海”号宙斯盾驱逐舰参加" +
            "，力图显示自己的影响力。";
    ObjectMapper mapper = new ObjectMapper();
    RestHighLevelClient client =  ESClient.getClient();
    String index = "sms-logs-index";
    String type="sms-logs-type";

    @Test
    public void createIndex() throws  Exception{
        // 1.准备关于索引的setting
        Settings.Builder settings = Settings.builder()
                .put("number_of_shards", 3)
                .put("number_of_replicas", 1);

        // 2.准备关于索引的mapping
        XContentBuilder mappings = JsonXContent.contentBuilder()
                .startObject()
                .startObject("properties")
                .startObject("corpName")
                .field("type", "keyword")
                .endObject()
                .startObject("createDate")
                .field("type", "date")
                .field("format", "yyyy-MM-dd")
                .endObject()
                .startObject("fee")
                .field("type", "long")
                .endObject()
                .startObject("ipAddr")
                .field("type", "ip")
                .endObject()
                .startObject("longCode")
                .field("type", "keyword")
                .endObject()
                .startObject("mobile")
                .field("type", "keyword")
                .endObject()
                .startObject("operatorId")
                .field("type", "integer")
                .endObject()
                .startObject("province")
                .field("type", "keyword")
                .endObject()
                .startObject("replyTotal")
                .field("type", "integer")
                .endObject()
                .startObject("sendDate")
                .field("type", "date")
                .field("format", "yyyy-MM-dd")
                .endObject()
                .startObject("smsContent")
                .field("type", "text")
                .field("analyzer", "ik_max_word")
                .endObject()
                .startObject("state")
                .field("type", "integer")
                .endObject()
                .endObject()
                .endObject();
        // 3.将settings和mappings 封装到到一个Request对象中
        CreateIndexRequest request = new CreateIndexRequest(index)
                .settings(settings)
                .mapping(type,mappings);
        // 4.使用client 去连接ES
        CreateIndexResponse response = client.indices().create(request, RequestOptions.DEFAULT);

        System.out.println("response:"+response.toString());

    }

    @Test
    public void  bulkCreateDoc() throws  Exception{
        // 1.准备多个json 对象
        String longcode = "1008687";
        String mobile ="138340658";
        List<String> companies = new ArrayList<String>();
        companies.add("腾讯课堂");
        companies.add("阿里旺旺");
        companies.add("海尔电器");
        companies.add("海尔智家公司");
        companies.add("格力汽车");
        companies.add("苏宁易购");
        companies.add("绝味鸭脖");
        companies.add("美团外卖");
        List<String> provinces = new ArrayList<String>();
        provinces.add("北京");
        provinces.add("重庆");
        provinces.add("上海");
        provinces.add("晋城");
        provinces.add("天水");
        provinces.add("石河子");

        BulkRequest bulkRequest = new BulkRequest();
        SmsLogs s1 = new SmsLogs();
        for (int i = 1; i <16 ; i++) {
            Thread.sleep(1000);
            s1.setId(i);
            s1.setCreateDate(new Date());
            s1.setSendDate(new Date());
            s1.setLongCode(longcode+i);
            s1.setMobile(mobile+2*i);
            s1.setCorpName(companies.get(i%8));
            s1.setSmsContent(doc.substring((i-1)*50,i*50));
            s1.setState(i%2);
            s1.setOperatorId(i%3);
            s1.setProvince(provinces.get(i%6));
            s1.setIpAddr("127.0.0."+i);
            s1.setReplyTotal(i*3);
            s1.setFee(i*6+"");
            String json1  = mapper.writeValueAsString(s1);
            bulkRequest.add(new IndexRequest(index,type,s1.getId().toString()).source(json1, XContentType.JSON));
            System.out.println("数据"+i+s1.toString());
        }

        // 3.client 执行
        BulkResponse responses = client.bulk(bulkRequest, RequestOptions.DEFAULT);

        // 4.输出结果
        System.out.println(responses.getItems().toString());
    }
}